import { useLaunch, useDidShow } from '@tarojs/taro'
import { Provider } from 'mobx-react'
import store from '@/store'
import 'qweather-icons/font/qweather-icons.css'
import { loginFun } from '@/utils/auth'
import './app.scss'

// 应用缓存版本
const APP_CACHE_VERSION = '1.0.0'

// 全局缓存检查清理函数
const checkAndCleanCache = () => {
  if (process.env.TARO_ENV === 'weapp') {
    const Taro = require('@tarojs/taro')
    try {
      // 检查缓存版本
      const cachedVersion = Taro.getStorageSync('appCacheVersion')
      console.log('当前缓存版本:', cachedVersion, '应用版本:', APP_CACHE_VERSION)

      // 如果缓存版本不匹配，清理全部缓存
      if (cachedVersion !== APP_CACHE_VERSION) {
        console.log('缓存版本不匹配，清理所有缓存')
        // 可以选择清除特定缓存而不是全部
        Taro.clearStorageSync()
        // 设置新版本
        Taro.setStorageSync('appCacheVersion', APP_CACHE_VERSION)
      }
    } catch (error) {
      console.error('缓存检查失败，重置缓存', error)
      try {
        Taro.clearStorageSync()
        Taro.setStorageSync('appCacheVersion', APP_CACHE_VERSION)
      } catch (e) {
        console.error('重置缓存失败', e)
      }
    }
  }
}

const App = (props) => {
  console.log('小程序进入了这个页面')

  useLaunch(() => {
    console.log('App launched')
    // 启动时检查并清理缓存
    checkAndCleanCache()

    // 初始化云函数
    if (process.env.TARO_ENV === 'weapp') {
      const Taro = require('@tarojs/taro')
      if (Taro.cloud) {
        Taro.cloud.init({
          env: 'cloud1-1ghcuz1u4c694d57', // 替换为你的云环境ID
          traceUser: true
        })
        console.log('云函数环境初始化成功')

        // 调用登录函数
        loginFun()
          .then((res) => {
            console.log('App登录结果:', res)
          })
          .catch((err) => {
            console.error('App登录失败:', err)

            // 登录失败时提示用户
            Taro.showToast({
              title: '登录失败，部分功能可能受限',
              icon: 'none',
              duration: 2000
            })
          })
      } else {
        console.error('请使用 2.2.3 或以上的基础库以使用云能力')
        Taro.showModal({
          title: '提示',
          content: '当前基础库版本过低，请更新微信版本后重试',
          showCancel: false
        })
      }
    }
  })

  useDidShow(() => {
    console.log('App shown')
  })

  return <Provider store={store}>{props.children}</Provider>
}
export default App
